﻿//-----------------------------------------------------------------------------------------
// <copyright file="BlipService.Subscription.cs" company="Jakub Florczyk (www.jakubflorczyk.pl)">
//      Copyright © 2009 Jakub Florczyk (www.jakubflorczyk.pl)
//      http://blipnet.codeplex.com/
// </copyright>
//-----------------------------------------------------------------------------------------

namespace BlipNet
{
    using System;
    using System.Globalization;

    /// <summary>
    /// Blip serwis.
    /// </summary>
    public partial class BlipService
    {
        /// <summary>
        /// Zwraca wszystkie subskrybcje bieżącego użytkownika.
        /// </summary>
        /// <returns>Subskrybcje użytkownika.</returns>
        public Subscription[] GetSubscriptions()
        {
            return RequestGetMany<Subscription>("/subscriptions");
        }

        /// <summary>
        /// Zwraca subskrybcje od bieżącego użytkownika do innych użytkowników.
        /// </summary>
        /// <returns>Subskrybcje użytkownika.</returns>
        public Subscription[] GetSubscriptionsFrom()
        {
            return RequestGetMany<Subscription>("/subscriptions/from");
        }

        /// <summary>
        /// Zwraca subskrybcje od innych użytkowników do bieżącego użytkownika.
        /// </summary>
        /// <returns>Subskrybcje użytkownika.</returns>
        public Subscription[] GetSubscriptionsTo()
        {
            return RequestGetMany<Subscription>("/subscriptions/to");
        }

        /// <summary>
        /// Zwraca wszystkie subskrybcje podanego użytkownika.
        /// </summary>
        /// <param name="login">Login użytkownika.</param>
        /// <returns>Subskrybcje użytkownika.</returns>
        public Subscription[] GetUserSubscriptions(string login)
        {
            return RequestGetMany<Subscription>(String.Format(CultureInfo.InvariantCulture, "/users/{0}/subscriptions", login));
        }

        /// <summary>
        /// Zwraca subskrybcje od podango użytkownika do innych użytkowników.
        /// </summary>
        /// <param name="login">Login użytkownika.</param>
        /// <returns>Subskrybcje użytkownika.</returns>
        public Subscription[] GetUserSubscriptionsFrom(string login)
        {
            return RequestGetMany<Subscription>(String.Format(CultureInfo.InvariantCulture, "/users/{0}/subscriptions/from", login));
        }

        /// <summary>
        /// Zwraca subskrybcje od innych użytkowników do podanego użytkownika.
        /// </summary>
        /// <param name="login">Login użytkownika.</param>
        /// <returns>Subskrybcje użytkownika.</returns>
        public Subscription[] GetUserSubscriptionsTo(string login)
        {
            return RequestGetMany<Subscription>(String.Format(CultureInfo.InvariantCulture, "/users/{0}/subscriptions/to", login));
        }

        /// <summary>
        /// Tworzy lub w razie potrzeby aktualizuje subskrybcję pomiędzy bieżącym użytkownikiem a podanym użytkownikem.
        /// </summary>
        /// <param name="login">Login użytkownika.</param>
        /// <param name="www">Wartość ozaznaczająca czy użytkownik ma być śledzony przez www tj. kokpit.</param>
        /// <param name="im">Wartość oznaczająca czy użytkownik ma być śledzony przez komunikator (odnosi skutek jedynie jeśli istnieje konfiguracja komunikatora).</param>
        public void AddSubscription(string login, bool www, bool im)
        {
            this.RequestPut(String.Format(CultureInfo.InvariantCulture, "/subscriptions/{0}?subscription[www]={1}&subscription[im]={2}", login, (www ? 1 : 0), (im ? 1 : 0)));
        }

        /// <summary>
        /// Usuwa subskrybcje pomiędzy bieżącym użytkownikiem a podanym użytkownikiem.
        /// </summary>
        /// <param name="login">Login użytkownika.</param>
        public void DeleteSubscription(string login)
        {
            this.RequestDelete(String.Format(CultureInfo.InvariantCulture, "/subscriptions/{0}", login));
        }
    }
}
